/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package dao.impl;

import dao.Conexao;
import dao.EventoDAO;
import dao.PortalDAOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import model.Evento;

/**
 *
 * @author Tadeu Augusto
 */
public class EventoDAOImpl implements EventoDAO {

    private Connection conn;

    public EventoDAOImpl() throws PortalDAOException {
        try {
            this.conn = Conexao.getConnection();
        } catch (Exception e) {
            throw new PortalDAOException("Erro: " + ":\n" + e.getMessage());
        }
    }

    @Override
    public void atualizar(Evento evento) throws PortalDAOException {
        PreparedStatement ps = null;
        Connection conn1 = null;
        if (evento == null) {
            throw new PortalDAOException("Nenhum evento foi informado.");
        }
        try {
            String sql = "UPDATE evento SET nome=?, sitio=?, noticia=?,"
                    + "cep=?, complendereco=? WHERE id=? AND cpfcnpj=?";
            conn1 = this.conn;
            ps = conn1.prepareStatement(sql);
            ps.setString(1, evento.getNome());
            ps.setString(2, evento.getSitio());
            ps.setString(3, evento.getNoticia());
            ps.setString(4, evento.getCep());
            ps.setString(5, evento.getComplendereco());
            ps.setInt(6, evento.getId());
            ps.setString(7, evento.getCpfcnpj());
        } catch (SQLException e) {
            throw new PortalDAOException("Erro ao atualizar evento. \n" + e);
        } finally {
            Conexao.closeConnection(conn1, ps);
        }
    }

    @Override
    public void excluir(Evento evento) throws PortalDAOException {
        PreparedStatement ps = null;
        Connection conn1 = null;
        if (evento == null) {
            throw new PortalDAOException("Nenhum evento informado.");
        }
        try {
            String sql = "DELETE FROM evento WHERE id = ?";
            conn1 = this.conn;
            ps = conn1.prepareStatement(sql);
            ps.setInt(1, evento.getId());
            ps.executeUpdate();
        } catch (SQLException e) {
            throw new PortalDAOException("Erro ao excluir evento " + e);
        } finally {
            Conexao.closeConnection(conn1, ps);
        }
    }

    @Override
    public void salvar(Evento evento) throws PortalDAOException {
        PreparedStatement ps = null;
        Connection conn1 = null;
        if (evento == null) {
            throw new PortalDAOException("Nenhum evento foi informado.");
        }
        try {
            String sql = "INSERT INTO evento values (?, ?, ?, ?, ?)";
            conn1 = this.conn;
            ps = conn1.prepareStatement(sql);
            ps.setString(1, evento.getNome());
            ps.setString(2, evento.getSitio());
            ps.setString(3, evento.getNoticia());
            ps.setString(4, evento.getCep());
            ps.setString(5, evento.getComplendereco());
            ps.executeUpdate();
        } catch (SQLException e) {
            throw new PortalDAOException("Erro ao inserir evento " + e);
        } finally {
            Conexao.closeConnection(conn1, ps);
        }
    }

    @Override
    public List todosEventos() throws PortalDAOException {
        PreparedStatement ps = null;
        Connection conn1 = null;
        ResultSet rs = null;
        try {
            String sql = "SELECT * FROM evento";
            conn1 = this.conn;
            ps = conn1.prepareStatement(sql);
            rs = ps.executeQuery();
            List<Evento> listaEventos = new ArrayList<Evento>();
            while (rs.next()) {
                int id = rs.getInt("id");
                String cpfcnpj = rs.getString("cpfcnpj");
                String nome = rs.getString("nome");
                String sitio = rs.getString("sitio");
                String noticia = rs.getString("noticia");
                String cep = rs.getString("cep");
                String complendereco = rs.getString("complendereco");
                listaEventos.add(new Evento(id, cpfcnpj, nome, sitio, noticia, cep, complendereco));
            }
            return listaEventos;
        } catch (SQLException e) {
            throw new PortalDAOException("Erro ao listar eventos. \n " + e);
        } finally {
            Conexao.closeConnection(conn1, ps, rs);
        }
    }
    
    @Override
    public Evento procurarEvento(int id) throws PortalDAOException{
        PreparedStatement ps = null;
        Connection conn1 = null;
        ResultSet rs = null;
        try {
            String sql = "SELECT * FROM evento WHERE id=?";
            conn1 = this.conn;
            ps = conn1.prepareStatement(sql);
            ps.setInt(1, id);
            rs = ps.executeQuery();
            Evento evento;
            if( !rs.next()) {
                evento = new Evento();
            } else {
                int id1 = rs.getInt("id");
                String cpfcnpj = rs.getString("cpfcnpj");
                String nome = rs.getString("nome");
                String sitio = rs.getString("sitio");
                String noticia = rs.getString("noticia");
                String cep = rs.getString("cep");
                String complendereco = rs.getString("complendereco");
                evento = new Evento(id1, cpfcnpj, nome, sitio, noticia, cep, complendereco);
            }
            return evento;
        } catch (SQLException e){
            throw new PortalDAOException("Erro ao procurar evento " + e);
        } finally {
            Conexao.closeConnection(conn1, ps, rs);
        }
    }
    
    @Override
    public Evento procurarEvento(String nome) throws PortalDAOException{
        PreparedStatement ps = null;
        Connection conn1 = null;
        ResultSet rs = null;
        try {
            String sql = "SELECT * FROM evento WHERE nome=?";
            conn1 = this.conn;
            ps = conn1.prepareStatement(sql);
            ps.setString(1, nome);
            rs = ps.executeQuery();
            Evento evento;
            if( !rs.next()) {
                evento = new Evento();
            } else {
                int id = rs.getInt("id");
                String cpfcnpj = rs.getString("cpfcnpj");
                String nome1 = rs.getString("nome");
                String sitio = rs.getString("sitio");
                String noticia = rs.getString("noticia");
                String cep = rs.getString("cep");
                String complendereco = rs.getString("complendereco");
                evento = new Evento(id, cpfcnpj, nome1, sitio, noticia, cep, complendereco);
            }
            return evento;
        } catch (SQLException e){
            throw new PortalDAOException("Erro ao procurar evento " + e);
        } finally {
            Conexao.closeConnection(conn1, ps, rs);
        }
    }
}
